#include <stdio.h>

// 数组指针赋值二维数组
void pointer1()
{
    int a[2][3] = {{3, 5, 1},
                   {3, 6, 9}};
    // 定义数组指针变量并赋值
    int(*p)[3] = a;                    // p是一个指向数组的指针，指向的数组有3个元素
    printf("%d\n", p[1][2]);           // 9
    printf("%d\n", *(p + 1));          // 这里是第一个元素的地址
    printf("%d\n", *((*(p + 1)) + 2)); // 9
}
// 数组指针赋值一维数组
void pointer2()
{
    int a[3] = {1, 2, 3};
    int(*p)[3] = &a;
    printf("%d\n", p[0][1]);         // 2
    printf("%d\n", *(*(p + 0) + 1)); // 2
}

// 指针数组
void pointer3()
{
    int *p[3]; // 表示有3个int类型指针的元素的数组
    int a = 1;
    int b = 2;
    int c = 3;
    p[0] = &a;
    p[1] = &b;
    p[2] = &c;
    printf("%d\n", *(p[0])); // 1
    printf("%d\n", *(p[1])); // 2
    printf("%d\n", *(p[2])); // 3
}
void main()
{
    pointer3();
}